

# self.records =

"""
# 需求学生管理系统
## 支持如下功能
1. 支持登录，只有登录成功才能进行其它操作，登录函数
2. 支持对学生信息进行增删改查。
3. 要求返回的格式是字典  ：{'code':0,'message':'登录成功'}
4. 要求加上登录时间，操作时间作为键值对放在返回的字典中
5. 必须是通过用户输入(控制台)

# 实现的思路 ：
1. 理思路
2. 写代码
"""
from datetime import datetime
from project01.mysqlClient import Mysql

# 定义通用的数据返回格式
result = {'code':'','message':''}


# 定义一个时间函数
def str_date():
    now = datetime.now()
    date_str = now.strftime("%Y-%m-%d %H:%M:%S")
    return date_str


# 编写一个登录函数
def login(username,password):
    db_username = "admin"
    db_password = "123456"
    # 是否为空
    if username is None or username == '':
        return {'code':1,"message":"用户名不能为空"}
    if password is None or password == '':
        return {'code': 2, "message": "密码不能为空"}

    # 正确登录
    if db_username == username and db_password == password:
        # 需要将时间作为键值对更新到结果中
        result.update({'code':0,'message':'登陆成功!','login_time':str_date()})
        return result
    return {'code': 3, "message": "用户名或密码不正确!"}


# 将数据库里的数据转化为原来定义的格式
def transform_data(result):
    records = []
    if not isinstance(result,tuple):
        return '传入的数据类型不正确'

    for x in result:
        dict_data = {}
        if not isinstance(x, tuple):
            return '传入的数据类型不正确'

        dict_data['studentNo'] = x[0]
        dict_data['name'] = x[1]
        dict_data['age'] = x[2]
        dict_data['sex'] = x[3]
        dict_data['class'] = x[4]
        dict_data['card'] = x[5]
        dict_data['city'] = x[6]
        records.append(dict_data)
    return records


# 编写一个学习信息的类
class Students(object):

    # 初始化方法
    def __init__(self):
        self.is_login = 1    # 0代表登录 ，1 代表未登录
        self.mysql = Mysql()
        sql = "select * from students"
        result = self.mysql.get_data(sql)
        self.records = transform_data(result)


    # 新增学生
    def add_student(self,studentNo,name,**kwargs):
        stu_dict = {}
        # 2. 判断是否输入了必填项
        if studentNo is None or studentNo == '':
            return {'code':12,'message':'学生编号不能为空'}
        if name is None or studentNo == '':
            return {'code':13,'message':'学生名称不能为空'}
        # 3. 判断输入的可选性是否正确
        sex = kwargs.get('sex')
        if sex not in ('男','女'):
            return {'code':14,'message':'性别输入不正确'}
        age = kwargs.get('age')
        if not str(age).isdigit():
            return {'code':15,'message':'输入年龄类型不正确!'}
        if not 0 < int(age) <= 120:
            return {'code':16,'message':'输入的年龄不正确'}
        # 4. 添加学生信息
        stu_dict['studentNo'] = studentNo
        stu_dict['name'] = name
        stu_dict.update(**kwargs)
        # self.records.append(stu_dict)
        sql = "insert into students values('{}','{}','{}','{}','{}','{}','{}')"
        self.mysql.exec_edit(sql.format(stu_dict.get('studentNo'),stu_dict.get('name'),
                                        stu_dict.get('age'),stu_dict.get('sex'),stu_dict.get('class'),
                                        stu_dict.get('card'),stu_dict.get('city')))
        return {'code':10,'message':'学生添加成功!','records':self.records,'add_time':str_date()}

    # 修改学生
    def edit_student(self,studentNo,**kwargs):
        # 判断出入的编号是否正确
        if not str(studentNo).isdigit():
            return {'code':21,"message":"输入的学生编号不正确"}
        # 判断用户传入的id是否在已经数据中 ，若找到，将字典中的数据更新
        studentNo = int(studentNo)
        for x in self.records:
            db_id = x.get('studentNo')
            if studentNo == db_id:
                x.update(**kwargs)
                return {"code":20,'message':'编辑成功','records':self.records,'update_time':str_date()}
        return {"code":22,'message':'没有找到所要编辑的数据'}





    # 删除学生
    def delete_student(self,studentNo):
        # 判断出入的编号是否正确
        if not str(studentNo).isdigit():
            return {'code': 21, "message": "输入的学生编号不正确"}
        studentNo = int(studentNo)
        for x in self.records:
            db_id = x.get('studentNo')
            if studentNo == db_id:
                self.records.remove(x)
                return {"code": 30, 'message': '删除成功', 'records': self.records, 'update_time': str_date()}
        return {"code": 31, 'message': '没有找到所要删除的数据'}

    # 查询学生
    def get_student(self,name):
        lst = []
        for x in self.records:
            db_name = x.get('name')
            if name in db_name:
                lst.append(x)

        # 判断那么是否为空
        if name is None or name == '':
            return {'code': 40, 'message': '查询学生成功!', 'records': self.records, 'search_time': str_date()}

        # 判断列表是否为空
        if lst:
            return {'code':40,'message':'查询学生成功!','records':lst,'search_time':str_date()}
        return {'code':41,'message':'未查到任何学生记录'}

# 控制台输入
if __name__ == '__main__':      # 在当前文件中，执行此代码，其它文件中不执行。主要场景就在于测试或当前文件的入口。

    student = Students()
    # 进行循环
    flag = True
    while flag:
        print("=" * 30)
        # 判断用户做的是什么操作 ,
        vls = input("请用户输入对应编号进行操作:"
              "\n 1:) 进行登录:"
              "\n 2:) 新增学生信息:"
              "\n 3:) 编辑学生信息:"
              "\n 4:) 删除学习信息:"
              "\n 5:) 查询学生信息:"
              "\n q:) 退出操作:"
              "\n 其它字符: 输入错误,请重新输入:")

        # 判断字符输入是否符合要求
        if not vls in ('1','2','3','4','5','q','quit'):
            continue

        # 登录
        if vls == '1':
            username = input("请输入用户名:")
            password = input("请输入密码:")
            result = login(username, password)
            print(result)

        # 新增学生
        if vls == '2':
            if result is None or result.get('code'):
                print({'code':11,'message':'用户未登录,请先进行登录操作！'})
                continue
            student_no = input("请输入学生编号:")
            name = input("请输入学生姓名:")
            age = input("请输入学生年龄:")
            sex = input("请输入学生性别:")
            s_class = input("请输入学生班级:")
            card = input("请输入学生身份证:")
            city = input("请输入学生城市:")
            s_dict = {'studentNo':student_no,'name':name,'age':age,'sex':sex,'class':s_class,'card':card,'city':city}
            add_result = student.add_student(**s_dict)
            print(add_result)

        # 编辑学生信息
        if vls == '3':
            if result is None or result.get('code'):
                print({'code':11,'message':'用户未登录,请先进行登录操作！'})
                continue
            student_no = input("请输入学生编号:")
            if student_no is None or student_no == '':
                print({'code':23,'message':'学生编号不能为空!'})
                continue
            name = input("请输入学生姓名:")
            age = input("请输入学生年龄:")
            sex = input("请输入学生性别:")
            s_class = input("请输入学生班级:")
            card = input("请输入学生身份证:")
            city = input("请输入学生城市:")
            s_dict = {'studentNo':student_no}
            if name != '':
                s_dict['name'] = name
            if age != '':
                s_dict['age'] = age
            if sex != '':
                s_dict['sex'] = sex
            if s_class != '':
                s_dict['class'] = s_class
            if card != '':
                s_dict['card'] = card
            if city != '':
                s_dict['city'] = city
            edit_result = student.edit_student(**s_dict)
            print(edit_result)

        # 删除
        if vls == '4':
            if result is None or result.get('code'):
                print({'code':11,'message':'用户未登录,请先进行登录操作！'})
                continue
            student_no = input("请输入学生编号:")
            if student_no is None or student_no == '':
                print({'code':23,'message':'学生编号不能为空!'})
                continue
            del_result = student.delete_student(student_no)
            print(del_result)

        # 查询
        if vls == '5':
            if result is None or result.get('code'):
                print({'code':11,'message':'用户未登录,请先进行登录操作！'})
                continue
            name = input("请输入查询的用户名:")
            search_result = student.get_student(name)
            print(search_result)


        # 退出
        if vls in ('q','quit'):
            flag = False
            print("退出操作")